﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Entidades.Espectaculos;
using System.Configuration;
using System.Data.SqlClient;

namespace Datos.Espectaculos
{
    public class EspTipoEspectaculoDAL
    {

        private static EspTipoEspectaculoDAL _instance;

        public static EspTipoEspectaculoDAL Instance()
        {
            if (_instance == null)
            {
                _instance = new EspTipoEspectaculoDAL();
            }

            return _instance;
        }
        
        public static string cnx = ConfigurationManager.ConnectionStrings["ApplicationServices"].ToString();

        public List<EspTipoEspectaculo> ListarTipoEspectaculo(int estado)
        {
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("sp_Esp_ListarTipoEspectaculo", con);
            com.Parameters.AddWithValue("@IdTipo", (object)DBNull.Value); 
            com.Parameters.AddWithValue("@Estado", estado);
            com.Parameters.AddWithValue("@Nombre", (object)DBNull.Value);
            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                SqlDataReader dr = com.ExecuteReader();
                List<EspTipoEspectaculo> lista = new List<EspTipoEspectaculo>();
                EspTipoEspectaculo obj = null;
                while (dr.Read())
                {
                    obj = new EspTipoEspectaculo();
                    obj.IdTipo = Convert.ToInt32(dr["IdTipo"].ToString());
                    obj.Tipo = dr["Tipo"].ToString();
                    obj.Estado = Convert.ToInt32(dr["Estado"].ToString());

                    lista.Add(obj);
                }
                dr.Close();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();

            }

        }

        public EspTipoEspectaculo ObtenerTipoEspectaculo(int idTipo)
        {
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("sp_Esp_ListarTipoEspectaculo", con);
            com.Parameters.AddWithValue("@IdTipo", idTipo);
            com.Parameters.AddWithValue("@Estado", (object)DBNull.Value);
            com.Parameters.AddWithValue("@Nombre", (object)DBNull.Value);
            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                SqlDataReader dr = com.ExecuteReader();
                EspTipoEspectaculo obj = null;
                while (dr.Read())
                {
                    obj = new EspTipoEspectaculo();
                    obj.IdTipo = Convert.ToInt32(dr["IdTipo"].ToString());
                    obj.Tipo = dr["Tipo"].ToString();
                    obj.Estado = Convert.ToInt32(dr["Estado"].ToString());
                }
                dr.Close();

                return obj;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();

            }

        }


        public List<EspTipoEspectaculo> ListarTipoEspectaculo(string nombre, int estado)
        {
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("sp_Esp_ListarTipoEspectaculo", con);
            com.Parameters.AddWithValue("@IdTipo", (object)DBNull.Value);
            com.Parameters.AddWithValue("@Estado", estado == -1 ? (object)DBNull.Value : estado);
            com.Parameters.AddWithValue("@Nombre", nombre == "" ? (object)DBNull.Value : nombre);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                SqlDataReader dr = com.ExecuteReader();
                List<EspTipoEspectaculo> lista = new List<EspTipoEspectaculo>();
                EspTipoEspectaculo obj = null;
                while (dr.Read())
                {
                    obj = new EspTipoEspectaculo();
                    obj.IdTipo = Convert.ToInt32(dr["IdTipo"].ToString());
                    obj.Tipo = dr["Tipo"].ToString();
                    obj.Estado = Convert.ToInt32(dr["Estado"].ToString());

                    lista.Add(obj);
                }
                dr.Close();

                return lista;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();

            }

        }

        public int AgregarTipoEspectaculo(EspTipoEspectaculo obj)
        {
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("[dbo].[sp_Esp_AgregarTipo]", con);

            com.Parameters.AddWithValue("@nombre", obj.Tipo);
            com.Parameters.AddWithValue("@estado", obj.Estado);

            SqlParameter p = new SqlParameter();
            p.Direction = System.Data.ParameterDirection.Output;
            p.Value = 0;
            p.ParameterName = "@newIdTipo";

            com.Parameters.Add(p);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                com.Transaction = con.BeginTransaction();
                int result = com.ExecuteNonQuery();
                if (result > 0)
                {
                    result = Convert.ToInt32(com.Parameters["@newIdTipo"].Value);
                    com.Transaction.Commit();
                }
                else
                {
                    com.Transaction.Rollback();
                }

                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

        public int ModificarTipoEspectaculo(EspTipoEspectaculo obj)
        {
            SqlConnection con = new SqlConnection(cnx);
            SqlCommand com = new SqlCommand("[dbo].[sp_Esp_ModificarTipo]", con);

            com.Parameters.AddWithValue("@nombre", obj.Tipo);
            com.Parameters.AddWithValue("@estado", obj.Estado);
            com.Parameters.AddWithValue("@IdTipo", obj.IdTipo);

            com.CommandType = System.Data.CommandType.StoredProcedure;
            try
            {
                con.Open();
                com.Transaction = con.BeginTransaction();
                int result = com.ExecuteNonQuery();
                if (result > 0)
                {
                    com.Transaction.Commit();
                }
                else
                {
                    com.Transaction.Rollback();
                }

                return result;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                con.Close();
            }
        }

    }
}
